package ai.zixing.strategy;

import org.springframework.beans.factory.InitializingBean;

import javax.annotation.Resource;

/**
 * 实现 InitializingBean 接口提供了 bean 被 BeanFactory 设置了所有属性后执行的处理结果
 */
public abstract class APlanStrategy implements InitializingBean {

    @Resource
    private PlanStrategyContext context;

    /**
     * 策略名称
     *
     * @return 策略名称
     */
    public abstract String getStrategyName();

    /**
     * 业务方法 1
     */
    public abstract void createPlan();

    /**
     * 业务方法 2
     */
    public abstract String queryPlan();

    /**
     * 业务方法 3
     */
    public abstract String handlerPlan();

    /**
     * 后置处理方法
     * @throws Exception Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        // 将具体的实现类注册到策略上下文中
        context.register(this);
        // spring 启动时可以查看具体注入 spring 的策略
        System.out.println("注册策略" + this.getStrategyName());
    }

}
